﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
using BLL.Validation;
using Entities;
using DAL;
using DAL.IRepository;

namespace BLL
{
    
    public class ChiTietThoiKhoaBieuDeNghiManager : IValidator<ChiTietThoiKhoaBieuDeNghi>
    {
         
        private readonly IGeneralRepository<ChiTietThoiKhoaBieuDeNghi> _repository;


        public ChiTietThoiKhoaBieuDeNghiManager(IGeneralRepository<ChiTietThoiKhoaBieuDeNghi> itr)
        {
            _repository = itr;
           

        }

        public ValidationResult Validate(ChiTietThoiKhoaBieuDeNghi chitietTKBDN)
        {
            var vResult = new ValidationResult();
             
            if (chitietTKBDN.SoTietCanXep <= 0)
                vResult.Messages.Add("số tiết cần phải lớn hơn hoạch bằng 0");

            if (chitietTKBDN.SoTietThucHanhCanXep >chitietTKBDN.SoTietCanXep)
                vResult.Messages.Add("số tiết thực hành phải nhỏ hơn hoạch bằng số tiết cần xếp"); 

            return vResult;
        }


        public ActionResult InsertOrUpdate(ChiTietThoiKhoaBieuDeNghi chitietTKBDN)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.InsertOrUpdate(chitietTKBDN))
                    
                    aResult.Exceptions.Add(new Exception("Thêm mới chi tiết không thành công"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

        public ActionResult Delete(ChiTietThoiKhoaBieuDeNghi chitietTKBDN)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.Delete(chitietTKBDN))
                    aResult.Exceptions.Add(new Exception("Xóa chi tiết đề nghị không thành công"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

        public ActionResult Delete(string chitietTKBDNId)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.Delete(t => t.MaKH == chitietTKBDNId))
                    aResult.Exceptions.Add(new Exception("Xóa  chi tiết kế hoạch không thành công"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }
        public ActionResultAsList<ChiTietThoiKhoaBieuDeNghi> Find(Expression<Func<ChiTietThoiKhoaBieuDeNghi, bool>> predicate)
        {
            var aResult = new ActionResultAsList<ChiTietThoiKhoaBieuDeNghi>();
            try
            {
                aResult.Result = _repository.Find(predicate).ToList();
                if (aResult.Result.Count == 0)
                    aResult.Exceptions.Add(new Exception("Không tìm thấy chi tiet đề nghị thỏa điều kiện"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }
                 

    }
}
